const CONFIG = require('../config')

const baseUrl = 'http://'+CONFIG.ip+':'+CONFIG.port;

const http = ({url,data,method,...other}={})=>{
  wx.showLoading({
    title: '正在加载中...',
  })
  //Promise封装处理
  return new Promise((resolve, reject)=>{
    wx.request({
      url: baseUrl+url,
      data:data,
      //获得请求头配置
      // header: getHeader(),
      method: method,
      ...other,
      complete:(res)=>{
        // console.log(res);
        wx.hideLoading()
        if(res.statusCode === 204){//服务器成功处理了请求，但没有返回任何内容。
          resolve(res)
        }else if(res.statusCode === 401){//请求要求身份验证。 对于需要登录的网页，服务器可能返回此响应。
          refreshToken().then(()=>_refetch(url,data,method)).then(resolve)
        }else if(res.statusCode !== 200){
          //获取后台返回报错信息
          let title = res.errMsg
          showToast(title)
        }else if(res.statusCode === 200){
          resolve(res)
        }else{
          reject(res)
        } 
      }
    })
  })
}

const showToast = title =>{
  wx.showToast({
    title: title,
    icon:'none',
    duration:1500,
    mask:true
  });
}

// function getHeader(){
//   if(wx.getStorageSync('token')){
//     var token = wx.getStorageSync('token')
//   }
// }
// 重构请求方式
const _fetch = (content) => {
  return http({
      url:content.url,
      data:content.data,
      method:content.method
  })
}
 
const _refetch = (url,data,method) => {
  return http({
      url:url,
      data:data,
      method:method
  })
}
//除开上面的调用方式之外，你也可以使用下面的这些方法，只需要关注是否传入method
const _get = (url, params = {}) => {
  return http({
      url,
      params
  })
}
const _post = (url, params = {}) => {
  return http({
      url,
      params,
      method: 'post'
  })
}
const _put = (url, params = {}) => {
  return http({
    url,
    params,
    method: 'put'
  })
}
const _delete = (url, params = {}) =>{
  return http({
    url,
    params,
    method: 'delete'
  })
}

// 添加刷新之后的操作处理方法
const refreshToken = () => {
  return new Promise((resolve, reject) => {
      // 获取token
      var token = wx.getStorageSync('userToken')
      // 设置请求data
      let params = {
          refresh_token:token.refresh_token
      }
      // 进行token刷新请求
      wx.request({
          url: getUrl('/app/connect/refresh'),
          data:params,
          // 设置请求header 鉴权
          header: {
              'Authorization': token.token_type +" "+ token.access_token
          },
          method:'post',
          // 请求响应处理
          complete: (res) => {
              if(res.data.code === 200 ){
                  // 全局存储token
                  app.globalData.usertToken = res.data.data
                  // Storage存储token
                  wx.setStorage({
                      key:"userToken",
                      data:res.data.data,
                      // 存储成功处理
                      success:function(){
                         resolve()
                      }
                  })
              }
          }
      })
  });
} 

module.exports = {
baseUrl,
refreshToken,
_fetch,
_refetch,
_get,
_post,
_put,
_delete
}
 